﻿Public Class xtf_ABMarticulocomposicionarticulo
    Public obj_articulocomposicionarticulo As cls_articulocomposicionarticulo_ = Nothing
    Private col_ControlesValidar As List(Of Control)
    Private unidaddetalle As cls_unidaddetalle_

    Public Sub New(ByRef prm_unidaddetalle As cls_unidaddetalle_)
        InitializeComponent()
        unidaddetalle = prm_unidaddetalle
        CargarSegunProduccion()
        CargarSegunValor()
        Me.Text = "Composicion Articulo - Nuevo"
        obj_articulocomposicionarticulo = New cls_articulocomposicionarticulo_
        AgregarValidacionesGlobal(Me, Me.lac_general, col_ControlesValidar)
        cbo_TipoSegunProduccion.SelectedIndex = 0
        cbo_TipoSegunValor.SelectedIndex = 0
        Dim mlocal As New cls_moneda_
        mlocal.MonedaLocal()
        lbl_Moneda.Text = mlocal.ToString
    End Sub

    Private Sub CargarSegunProduccion()
        cbo_TipoSegunProduccion.Properties.Items.Clear()
        For Each tipocosto As cls_articulocomposicionarticulo_.enu_segunproduccion In [Enum].GetValues(GetType(cls_articulocomposicionarticulo_.enu_segunproduccion))
            cbo_TipoSegunProduccion.Properties.Items.Add(EnumDescription(tipocosto))
        Next
        cbo_TipoSegunProduccion.SelectedIndex = 0
    End Sub

    Private Sub CargarSegunValor()
        cbo_TipoSegunValor.Properties.Items.Clear()
        For Each tipocosto As cls_articulocomposicionarticulo_.enu_segunvalor In [Enum].GetValues(GetType(cls_articulocomposicionarticulo_.enu_segunvalor))
            cbo_TipoSegunValor.Properties.Items.Add(EnumDescription(tipocosto))
        Next
        cbo_TipoSegunValor.SelectedIndex = 0
    End Sub

    Private Sub Cargarunidaddetalle_()
        If Not IsNothing(txt_articulo.Tag) Then
            If Not IsNothing(CType(txt_articulo.Tag, cls_articulo_).unidad) Then
                cbo_unidad.Properties.Items.Clear()
                For Each unidaddetalle As cls_unidaddetalle_ In CType(txt_articulo.Tag, cls_articulo_).unidad.unidaddetalle_.Items
                    cbo_unidad.Properties.Items.Add(unidaddetalle)
                Next
                cbo_unidad.SelectedIndex = 0
                cbo_unidad.Enabled = True
            End If
        End If
    End Sub

    Public Sub Modificar(ByRef articulocomposicionarticulo As cls_articulocomposicionarticulo_)
        If IsNothing(obj_articulocomposicionarticulo) Then
            obj_articulocomposicionarticulo = New cls_articulocomposicionarticulo_
        End If
        obj_articulocomposicionarticulo = articulocomposicionarticulo

        Me.Text = "Composicion Articulo - " & obj_articulocomposicionarticulo.ToString

        txt_articulo.Text = obj_articulocomposicionarticulo.articulo.ToString
        txt_articulo.Tag = obj_articulocomposicionarticulo.articulo
        Cargarunidaddetalle_()
        For Each item As cls_unidaddetalle_ In cbo_unidad.Properties.Items
            If item.idunidaddetalle = obj_articulocomposicionarticulo.idunidaddetalle Then
                cbo_unidad.SelectedItem = item
                Exit For
            End If
        Next

        If obj_articulocomposicionarticulo.tiposegunproduccion = cls_articulocomposicionarticulo_.enu_segunproduccion.fijo Then
            cbo_TipoSegunProduccion.SelectedIndex = 0
        Else
            cbo_TipoSegunProduccion.SelectedIndex = obj_articulocomposicionarticulo.tiposegunproduccion - 5
        End If


        txt_Cantidad.Text = unidaddetalle.CValCargar(CType(cbo_unidad.SelectedItem, cls_unidaddetalle_).CCantCargar(obj_articulocomposicionarticulo.cantidad))
        'txt_Cantidad.Text = (CType(cbo_unidad.SelectedItem, cls_unidaddetalle_).CCantCargar(obj_articulocomposicionarticulo.cantidad))

        If articulocomposicionarticulo.articulo.costobloqueado Then
            cargarCosto(articulocomposicionarticulo.articulo)
        Else
            txt_Valor.Text = CType(cbo_unidad.SelectedItem, cls_unidaddetalle_).CValCargar(obj_articulocomposicionarticulo.valor)
            cbo_TipoSegunValor.SelectedIndex = obj_articulocomposicionarticulo.tiposegunproveedor
            If obj_articulocomposicionarticulo.idproveedor <> 0 Then
                txt_Proveedor.Text = obj_articulocomposicionarticulo.proveedor.ToString
                txt_Proveedor.Tag = obj_articulocomposicionarticulo.proveedor
                Dim proveedor As cls_proveedor_ = obj_articulocomposicionarticulo.proveedor
                txt_Valor.Text = CType(cbo_unidad.SelectedItem, cls_unidaddetalle_).CValCargar(proveedor.costo(obj_articulocomposicionarticulo.idarticulo))
            End If
        End If

        obj_articulocomposicionarticulo.articulo = Nothing
        obj_articulocomposicionarticulo.articuloprimario = Nothing
        obj_articulocomposicionarticulo.proveedor = Nothing
        obj_articulocomposicionarticulo.unidaddetalle = Nothing
    End Sub

    Public Function ComprobarDatos() As Boolean
        If Not ControlarValidacionesGlobal(col_ControlesValidar) Then
            ErrManagerShow("000004", Me)
            Return False
        End If
        Return True
    End Function

    Private Sub btn_Guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Guardar.Click
        If ComprobarDatos() Then

            obj_articulocomposicionarticulo.idarticulo = CType(txt_articulo.Tag, cls_articulo_).idarticulo
            obj_articulocomposicionarticulo.idunidaddetalle = CType(cbo_unidad.SelectedItem, cls_unidaddetalle_).idunidaddetalle
            obj_articulocomposicionarticulo.cantidad(unidaddetalle.CValGuardar(CDec(CType(cbo_unidad.SelectedItem, cls_unidaddetalle_).CCantGuardar(txt_Cantidad.Text))))
            obj_articulocomposicionarticulo.cantidad((CDec(CType(cbo_unidad.SelectedItem, cls_unidaddetalle_).CCantGuardar(txt_Cantidad.Text))))

            If cbo_TipoSegunProduccion.SelectedIndex = 0 Then
                obj_articulocomposicionarticulo.tiposegunproduccion = 0
            Else
                obj_articulocomposicionarticulo.tiposegunproduccion = cbo_TipoSegunProduccion.SelectedIndex + 5
            End If


            obj_articulocomposicionarticulo.valor = CType(cbo_unidad.SelectedItem, cls_unidaddetalle_).CValGuardar(txt_Valor.Text)

            obj_articulocomposicionarticulo.tiposegunproveedor = cbo_TipoSegunValor.SelectedIndex
            If Not IsNothing(txt_Proveedor.Tag) And cbo_TipoSegunValor.SelectedIndex = cls_articulocomposicionarticulo_.enu_segunvalor.proveedor Then
                obj_articulocomposicionarticulo.idproveedor = CType(txt_Proveedor.Tag, cls_proveedor_).idproveedor
            Else
                obj_articulocomposicionarticulo.idproveedor = 0
            End If

            Me.DialogResult = Windows.Forms.DialogResult.OK
        End If
    End Sub

    Private Sub btn_Cerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Cerrar.Click
        Me.DialogResult = Windows.Forms.DialogResult.Cancel
    End Sub

    Private Sub txt_articulo_ButtonClick(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.Controls.ButtonPressedEventArgs) Handles txt_articulo.ButtonClick
        Dim buscar As xtf_buscardor
        Dim articulo_ As New cls_articulo_
        articulo_.CargarTodos()
        buscar = New xtf_buscardor("Articulos", articulo_, {"nombre|Nombre", "codigo|Codigo", "descripcion|Descripcion"})
        If buscar.ShowDialog() = Windows.Forms.DialogResult.OK Then
            txt_articulo.Text = buscar.obj_resultado.ToString
            txt_articulo.Tag = buscar.obj_resultado
            Cargarunidaddetalle_()
            Dim articulo As cls_articulo_ = buscar.obj_resultado
            If articulo.costobloqueado Then
                cargarCosto(articulo)
            Else
                lcg_Valor.Enabled = True
            End If
        End If
    End Sub

    Private Sub cargarCosto(ByRef prm_articulo As cls_articulo_)
        cbo_TipoSegunValor.SelectedIndex = prm_articulo.tipocosto
        txt_Valor.Text = CType(cbo_unidad.SelectedItem, cls_unidaddetalle_).CValCargar(prm_articulo.costo)
        Select Case prm_articulo.tipocosto
            Case cls_articulo_.enu_tipocosto.proveedor
                txt_Proveedor.Tag = prm_articulo.proveedor
                txt_Proveedor.Text = prm_articulo.proveedor.ToString
        End Select
        lcg_Valor.Enabled = False
    End Sub

    Private Sub cbo_TipoSegunProveedor_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbo_TipoSegunValor.SelectedIndexChanged
        If Not IsNothing(txt_articulo.Tag) Then
            If CType(txt_articulo.Tag, cls_articulo_).costobloqueado Then
                cargarCosto(CType(txt_articulo.Tag, cls_articulo_))
            Else
                txt_Proveedor.Enabled = False
                txt_Valor.Properties.ReadOnly = True
                Select Case cbo_TipoSegunValor.SelectedIndex
                    Case cls_articulocomposicionarticulo_.enu_segunvalor.fijo
                        txt_Valor.Text = 0
                        txt_Valor.Properties.ReadOnly = False
                    Case cls_articulocomposicionarticulo_.enu_segunvalor.proveedor
                        txt_Proveedor.Enabled = True
                        If Not IsNothing(txt_Proveedor.Tag) Then
                            txt_Valor.Text = CType(cbo_unidad.SelectedItem, cls_unidaddetalle_).CValCargar(CType(txt_articulo.Tag, cls_articulo_).costo(cbo_TipoSegunValor.SelectedIndex, CType(txt_Proveedor.Tag, cls_proveedor_).idproveedor))
                        Else
                            txt_Valor.Text = 0
                        End If
                    Case Else
                        txt_Valor.Text = CType(cbo_unidad.SelectedItem, cls_unidaddetalle_).CValCargar(CType(txt_articulo.Tag, cls_articulo_).costo(CType(cbo_TipoSegunValor.SelectedIndex, cls_articulo_.enu_tipocosto)))
                End Select
            End If
        End If

    End Sub

    Private Sub txt_Proveedor_ButtonClick(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.Controls.ButtonPressedEventArgs) Handles txt_Proveedor.ButtonClick
        Dim buscar As xtf_buscardor
        Dim proveedor_ As New cls_proveedor_
        proveedor_.CargarXidarticulo(CType(txt_articulo.Tag, cls_articulo_).idarticulo, True)
        buscar = New xtf_buscardor("Proveedores", proveedor_, {"codigo|Codigo", "razonsocial|Razon Social"})
        If buscar.ShowDialog() = Windows.Forms.DialogResult.OK Then
            txt_Proveedor.Text = buscar.obj_resultado.ToString
            txt_Proveedor.Tag = buscar.obj_resultado
            If Not IsNothing(txt_articulo.Tag) Then
                Dim proveedor As cls_proveedor_ = buscar.obj_resultado
                txt_Valor.Text = CType(cbo_unidad.SelectedItem, cls_unidaddetalle_).CValCargar(proveedor.costo(CType(txt_articulo.Tag, cls_articulo_).idarticulo))
            End If
        End If
    End Sub

    Private Sub cbo_TipoSegunProduccion_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbo_TipoSegunProduccion.SelectedIndexChanged
        txt_Cantidad.Properties.ReadOnly = True
        Select Case cbo_TipoSegunProduccion.SelectedIndex
            Case cls_articulocomposicionarticulo_.enu_segunvalor.fijo
                txt_Cantidad.Properties.ReadOnly = False
                txt_Cantidad.Text = 0
            Case Else
                txt_Cantidad.Text = unidaddetalle.CValCargar(CType(cbo_unidad.SelectedItem, cls_unidaddetalle_).CCantCargar(obj_articulocomposicionarticulo.cantidad(CType(cbo_TipoSegunProduccion.SelectedIndex + 5, cls_articulocomposicionarticulo_.enu_segunproduccion))))
        End Select
    End Sub

    Private Sub cbo_unidad_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbo_unidad.SelectedIndexChanged
        cbo_TipoSegunProveedor_SelectedIndexChanged(Nothing, Nothing)
        cbo_TipoSegunProduccion_SelectedIndexChanged(Nothing, Nothing)
    End Sub

    Private Sub btn_VerInformacion_Click(sender As System.Object, e As System.EventArgs) Handles btn_VerInformacion.Click
        Dim tmp_produccion As New cls_produccion_
        Select Case cbo_TipoSegunProduccion.SelectedIndex
            Case cls_articulocomposicionarticulo_.enu_segunvalor.fijo
            Case Else
                If tmp_produccion.Buscar(obj_articulocomposicionarticulo.ProduccionXCantidadXidarticuloprimario()) = True Then
                    Dim tmp_ABMProduccion As New xtf_ABMproduccion
                    tmp_ABMProduccion.Modificar(tmp_produccion, Nothing, Nothing)
                    tmp_ABMProduccion.Show()
                End If
        End Select
    End Sub
End Class